/*
 * @Author: name
 * @Date:   2019-08-07 11:58:26
 * @Last Modified by:   name
 * @Last Modified time: 2019-08-12 20:42:22
 */

'use strict';
//入口函数
//
//
//导入vue
import Vue from "vue";
// 导入vue-router包
import VueRouter from "vue-router";
// 注册一下
Vue.use(VueRouter);
//导入vue-resource并注册
import VueResource from "vue-resource";
Vue.use(VueResource);



//导入moment的包
import moment from "moment";



//导入mint-ui并注册

import MintUI from 'mint-ui';
//导入App.vue组件
import 'mint-ui/lib/style.css';
import app from './App.vue';
Vue.use(MintUI);


// 安装vue-preview插件
import VuePreview from 'vue2-preview';
// defalut install
Vue.use(VuePreview);

// 导入vuex，并注册
import Vuex from 'vuex'

Vue.use(Vuex)


// 导入mui的样式
import "../lib/mui/css/mui.min.css";
import "../lib/mui/css/icons-extra.css";




// 导入router.js
import router from "./router.js";



//定义一个全局的过滤器 ==>用来时间格式化，并且有可能以后还要使用该过滤器，所以应该为全局的
Vue.filter("dateFormat", function(dataStr, pattern = "YYYY-MM-DD HH:mm:ss") {
    return moment(dataStr).format(pattern);
})

// 每次开始之前要把存储在car中的数据取出，然后重新给store中的car，这样就永久保存了用户的之前的数据
var car=window.JSON.parse(window.localStorage.getItem("car")||'[]');

// 创建vuex实例
var store = new Vuex.Store({
    state: {
        car: car
    },
    mutations: {
        addToCarM(state, data) {
            var flag = false; //假设没有找到

            state.car.some(item => {
                if (item.id === data.id) { //car中已经存在这个公共数据
                    item.count += parseInt(data.count);
                    flag = true;
                    return true;
                }
            });
            // 如果没有找到就铺push进数组
            if (!flag) {
                state.car.push(data);
            }
            // 将数据存储到localstorage中
            localStorage.setItem('car',window.JSON.stringify(state.car));//这里打包出错时，在JSON前面加一个window就可以解决,这个错误很坑
        },
        delM(state,id){
            state.car.forEach((item,i) => {
                if(item.id==id){
                    state.car.splice(i,1);
                }
            })
            localStorage.setItem('car',window.JSON.stringify(state.car));//这里打包出错时，在JSON前面加一个window就可以解决,这个错误很坑

        },
        updataCount(state,obj){
            // console.log(obj);
            state.car.some(item => {
                if(item.id==obj.id){
                    item.count=obj.count;
                    return true;
                }
            });
            localStorage.setItem('car',window.JSON.stringify(state.car));//这里打包出错时，在JSON前面加一个window就可以解决,这个错误很坑
        },
        updataSelected(state , obj){
            state.car.some( item => {
                if(item.id==obj.id){
                    item.selected=obj.selected;
                }
            })
            localStorage.setItem('car',window.JSON.stringify(state.car));//这里打包出错时，在JSON前面加一个window就可以解决,这个错误很坑
        },
    },
    getters: {
        sumCount(state) {
            var c = 0;
            state.car.forEach(item => {
                c += item.count;
            });
            return c;
        },
        shopCount(state){//构造一个数据格式{id:count}
            var o={ } ;
            state.car.forEach( item =>{
                o[item.id]=item.count;
            });
            // console.log(o);
            return o;
        },
        selectobj(state){
            var o={ };
            state.car.forEach(item => {
                o[item.id]=item.selected;
            })
            return o;
        },
        jiesuanG(state){
            var o={
                count:0,
                sum:0
             };
            state.car.forEach(item => {
                if(item.selected){
                    o.count+=parseInt(item.count);
                    o.sum+=parseInt(item.count*item.price);
                }
            })
            return o;
        }
    }
});

var vm = new Vue({
    el: "#app",
    data: {},
    methods: {},
    render: c => c(app),
    router: router, //路由的挂载，这里用到了路由，因此这里要重新道路路由的包并注册一下
    store, //公共仓库的挂载
});